const http = require('http');
const file = require('fs');
const url = require('url');

http.createServer((req,res)=>{
  let {pathname} = url.parse(req.url);;
  //为了有缓存效果 需要加上头 last-Modified 所以就需要获取文件的修改时间。
  // fs 模块可以做到获取文件的信息
  file.stat(`.\\${pathname}`,(err,stat)=>{
    if(err){
      res.writeHeader(404);
      res.write('Not Found');
      res.end();
    }else{
      if(req.headers['if-modified-since']){
        //对比时间
        let cDate = Math.floor(new Date(req.headers['if-modified-since']).getTime()/1000);
        let sDate = Math.floor(stat.mtime.getTime()/1000);
        if(sDate>cDate){
          sendFileToClient();
        }else{
          res.writeHeader(304);
          res.write('not modified');
          res.end();
        }
      }else{
        sendFileToClient();
      }
      function sendFileToClient(){
        let rs =  file.createReadStream(`.\\${pathname}`);
        res.setHeader('Last-Modified',stat.mtime.toUTCString());
        rs.pipe(res);
        res.on('error',err=>{
          res.writeHeader(404);
          res.write('Not Found');
          res.end();
        })
      }
    }
  });
}).listen(8080);
